#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include "shmz.h"

/* Función principal */
int main(void)
{
int shmid;
memo *zona;
pid_t pid;
/* Creación de la zona de memoria compartida */
if((shmid = shmget(CLAVE_SHM, sizeof(memo), IPC_CREAT|0666)) == -1){
perror("shmget");
exit(EXIT_FAILURE);
}
/* Obtención del puntero a la estructura de datos compartida */
zona = (memo *)shmat(shmid,0,0);
/* Escribimos en la zona de memoria común */
zona->tarea = 2;
zona->valor = 3.1415;
/* Creación de un proceso hijo */
switch(pid=fork())
{
case (pid_t) -1:
(void) perror("fork");
exit(EXIT_FAILURE);
case (pid_t) 0:
/* Ejecutamos el proceso2 */
if(execlp("./P4B","P4B",0) == -1){
(void) perror("execlp");
exit(EXIT_FAILURE);
}
}
/* El proceso padre se queda esperando un cambio en la variable compartida tarea,
dicha modificación deberá realizarla el proceso2 */
while(zona->tarea == 2);
/* Espera a que termine el hijo antes de borrar la zona de memoria compartida */
wait(NULL);
/* Borrado de la zona de memoria compartida */
shmctl(shmid, IPC_RMID,0);
exit(EXIT_SUCCESS);
}
/* Fin función principal */
